<?php

/**
 * JugadorDeEquipo form.
 *
 * @package    ehockey
 * @subpackage form
 * @author     Your name here
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class JugadorDeEquipoForm extends BaseJugadorDeEquipoForm
{
	public $validationDisabler;
	
	public function configure()
	{
		$this->widgetSchema['numero_de_camiseta']->setAttribute('class', 'small_input');

		sfProjectConfiguration::getActive()->loadHelpers(array('Url'));
		$equipo = $this->getOption('equipo', null);
		if ($equipo != null) {
			// Me setearon un equipo, soy un subform. Voy a filtrar la lista de jugadores
			// para que sea solo la del equipo
			$this->widgetSchema['equipo_id'] = new sfWidgetFormInputHidden();
			$this->widgetSchema['jugador_id'] = new sfWidgetFormDoctrineJQueryAutocompleter(
			array('model' => 'Jugador',
				  "url"   => url_for("jugador/listarajax?club=" . $equipo->Club->id . "&sector=" . $equipo->sector)	
			));
			$this->defaults['equipo_id'] = $equipo->id;
		}

		$this->validationDisabler = new Disabler();
		$validator = $this->getValidator('numero_de_camiseta');
		$this->setValidator('numero_de_camiseta', new ValidatorDisabler($validator, $this->validationDisabler));
		$validator = $this->getValidator('jugador_id');
		$this->setValidator('jugador_id', new ValidatorDisabler($validator, $this->validationDisabler));		

		$this->validatorSchema->setPreValidator(new NoBothEmptyValidator(array('form' => $this)));
	}

}


class NoBothEmptyValidator extends sfValidatorBase
{
	protected function configure($options = array(), $messages = array())
	{
		$this->addOption('form');
	}

	protected function doClean($value)
	{
		// Si tengo uno vacio y el otro no, puteo. Si tengo los dos vacios los ignoro
		$numeroCamisetaEmpty = $this->isEmpty($value['numero_de_camiseta']);
		$jugadorEmpty = $this->isEmpty($value['jugador_id']);
		if ($numeroCamisetaEmpty == $jugadorEmpty) {
			// Son iguales
			if ($numeroCamisetaEmpty) {
				$this->getOption('form')->validationDisabler->disable = true;
			}
		}
		return $value;
	}
};